"""
	1. 获取元组中,长度最大的列表
	2. 根据敌人列表,获取所有敌人的姓名与血量与攻击力
	3. 在敌人列表中,获取攻击力大于100的所有活人
	4. 根据防御力对敌人列表进行降序排列
"""

sp = ([1, 1, 1], [2, 2], [3, 3, 3, 3, 3, 3])


class Enemy:
	def __init__(self, name, hp, atk, defense):
		self.name = name
		self.hp = hp
		self.atk = atk
		self.defense = defense

	def __str__(self):
		return f"{self.name}, {self.hp}, {self.atk}, {self.defense}"


list1 = [
	Enemy("张三", 86, 120, 58),
	Enemy("成昆", 0, 100, 5),
	Enemy("谢逊", 86, 130, 60),
	Enemy("灭霸", 0, 1390, 790)
]

print("获取元组中,长度最大的列表")
ma = max(sp, key=lambda so: len(so))
print(ma)


def atk_blood():
	for i in list1:
		yield i.name, i.atk


print("根据敌人列表,获取所有敌人的姓名与血量与攻击力")
for item in map(lambda so: (so.name, so.hp, so.atk), list1):
	print(item)


print("在敌人列表中,获取攻击力大于100的所有活人")
for item in filter(lambda so: so.atk > 100 and so.hp > 0, list1):
	print(item)

print("根据防御力对敌人列表进行降序排列")
for item in sorted(list1, key=lambda so: so.defense, reverse=True):
	print(item)
